#!/usr/bin/python
# -*- coding: utf-8 -*-

import wx
import wx.aui
import os

class VistaCifrar(wx.Panel):
    
    """
    Clase que genera la interfaz gráfica del paquete de cifrar y firmar documentos
    """
    
    #Constructor de la clase
    def __init__(self,ventanaMadre):
        """
        Creación de un objeto de tipo wx.Window para el módulo de contrasenhas.
        :param ventanaMadre: La ventan madre que contendrá esta ventana
        """
        wx.Panel.__init__(self, ventanaMadre, -1)
        
        # CREAMOS LOS IDs DE LOS BOTONES DE LA VENTANA
        self.idCifrar = 701
        self.idDescifrar = 702
        self.idFirmar = 703
        self.idVerificar = 704
        self.idCifFir = 705
        self.idVerDesc = 706
        self.idBorrar = 707
        
        # CREAMOS LOS PANELES
        self.crearVentanas()
        # CREACIÓN DE LAS DIVISIONES DE LA PANTALLA
        self.crearAuiManager()

        
    
    def crearVentanas(self):
        
        # CREAMOS EL PANEL CENTRAL
        self.panelA = wx.Window(self, -1, style=wx.NO_BORDER)
        self.crearComponentesPanelA()
        # CREAMOS EL PANEL IZQUIERDO
        self.panelB = wx.Window(self, -1, style=wx.NO_BORDER)
        self.crearMenuIzquierdo()
        # CREAMOS EL PANEL INFERIOR
        self.panelC = wx.Window(self, -1, style=wx.NO_BORDER)
    
    def crearAuiManager(self):
        
        self.mgr = wx.aui.AuiManager()
        self.mgr.SetManagedWindow(self)
        self.mgr.AddPane(self.panelA, wx.aui.AuiPaneInfo().CenterPane().Name("Panel A"))
        self.mgr.AddPane(self.panelB,
                         wx.aui.AuiPaneInfo().
                         Left().Layer(2).BestSize((240, -1)).
                         MinSize((245, -1)).
                         Floatable(False).FloatingSize((240, 700)).
                         Caption("Árbol de directorio").
                         CloseButton(False).
                         Name("Panel B"))
        self.mgr.AddPane(self.panelC,
                         wx.aui.AuiPaneInfo().
                         Bottom().BestSize((-1, 150)).
                         MinSize((-1, 60)).
                         Floatable(False).FloatingSize((500, 160)).
                         Caption("Mensajes").
                         CloseButton(False).
                         Name("Panel C"))

        self.mgr.Update()

        self.mgr.SetFlags(self.mgr.GetFlags() ^ wx.aui.AUI_MGR_TRANSPARENT_DRAG)
    
    
    def crearMenuIzquierdo(self):
        
        # CREAMOS UNA CAJA VERTICAL PARA LUEGO INGRESARLE EL GENERICDIRCTRL
        boxMenuIzquierdo = wx.BoxSizer(wx.VERTICAL)
        # CREAMOS EL GENERICDIRCTRL Y LE ASOCIAMOS EL PANEL B
        self.dirTree = wx.GenericDirCtrl(self.panelB, -1, size=(235,480), style=0)
        # COLOCAMOS LA RUTA POR DEFECTO HOME, PARA QUE EL GENERICDIRCTRL MUESTRE ABIERTA ESTA RUTA
        self.dirTree.SetPath(os.environ['HOME'])
        # AÑADIMOS EL GENERCIDIRCOTRL A LA CAJA CREADA
        boxMenuIzquierdo.Add(self.dirTree,0,wx.ALL,5)
        # AÑADIMOS LA CAJA CREADA AL PANEL B
        self.panelB.SetSizer(boxMenuIzquierdo)
        self.panelB.Layout()
    
    def crearComponentesPanelA(self):
        
        # CREACIÓN DEL LISTCTRL DONDE SE COLOCARAN LOS ARCHIVOS QUE SE AÑADAN
        self.dirAnhadido = wx.ListCtrl(self.panelA, -1,size=(630,250), style=wx.BORDER_SUNKEN
                                 | wx.LC_REPORT 
                                 #| wx.BORDER_NONE
                                 #| wx.LC_EDIT_LABELS
                                 #| wx.LC_SORT_ASCENDING
                                 #| wx.LC_NO_HEADER
                                 | wx.LC_VRULES
                                 #| wx.LC_HRULES
                                 | wx.LC_SINGLE_SEL)
        
        # DEFINIMOS EL TAMAÑO QUE TENDRÁN LAS IMÁGENES DEL LISTCTRL
        self.listaImagenes = wx.ImageList(16, 16)
        # IMAGEN DE UN DIRECTORIO
        self.directorio = self.listaImagenes.Add(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN,   wx.ART_OTHER, (16,16)))
        # IMAGEN DE UN ARCHIVO
        self.archivo = self.listaImagenes.Add(wx.ArtProvider_GetBitmap(wx.ART_NORMAL_FILE, wx.ART_OTHER, (16,16)))
        # AÑADIMOS LAS IMÁGENES A LAS COLUMNAS DEL LISTCTRL Y COLOCAMOS LAS CABECERAS DE CADA COLUMNA
        self.dirAnhadido.SetImageList(self.listaImagenes, wx.IMAGE_LIST_SMALL)
        self.dirAnhadido.InsertColumn(0, "Ficheros procesar")
        self.dirAnhadido.SetColumnWidth(0,200)
        self.dirAnhadido.InsertColumn(1, "Ruta")
        self.dirAnhadido.SetColumnWidth(1,425)
        
        
        # CAJA VERTICAL QUE ALMACENARÁ LOS BOTONES DE AÑADIR Y QUITAR ARCHIVOS DEL LISTCTRL
        boxBotonesDirA = wx.BoxSizer(wx.VERTICAL)
        # BOTON ATRAS
        self.botonAtras = wx.Button(self.panelA, -1,"<-",size=(40,25))
        self.botonAtras.SetFont(wx.Font(8, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, ""))
        self.botonAtras.SetToolTipString("Eliminar documento para ser procesado")
        # BOTON ADELANTE
        self.botonAdelante = wx.Button(self.panelA, -1,"->",size=(40,25))
        self.botonAdelante.SetFont(wx.Font(8, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, ""))
        self.botonAdelante.SetToolTipString("Añadir documento para ser procesado")
        # INGRESO DE BOTONES A LA CAJA
        boxBotonesDirA.Add(self.botonAdelante,0,wx.TOP,0)
        boxBotonesDirA.Add(self.botonAtras,0,wx.TOP,0)
        # BOTONES QUE VAN DEBAJO DEL self.dirAnhadido 
        self.bCifrar = wx.Button(self.panelA,self.idCifrar,"Cifrar",size=(82,25))
        self.bCifrar.SetFont(wx.Font(8, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, ""))
        self.bCifrar.SetToolTipString("Cifrar documentos: Permite ocultar el contenido del documento para que sólo el destinatario final pueda leerlo.")
        self.bDescifrar = wx.Button(self.panelA,self.idDescifrar,"Descifrar",size=(82,25))
        self.bDescifrar.SetFont(wx.Font(8, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, ""))
        self.bDescifrar.SetToolTipString("Descifrar documentos: Recupera el texto normal de un documento que había sido protegido mediante cifrado.")
        self.bFirmar = wx.Button(self.panelA,self.idFirmar,"Firmar",size=(82,25))
        self.bFirmar.SetFont(wx.Font(8, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, ""))
        self.bFirmar.SetToolTipString("Firmar documentos (Solo Extensión .txt): Comprueba que el documento no fue modificado y lo que lee es exactamente lo que redactamos.")
        self.bVerificarF = wx.Button(self.panelA,self.idVerificar,"Verificar",size=(82,25))
        self.bVerificarF.SetFont(wx.Font(8, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, ""))
        self.bVerificarF.SetToolTipString("Verificar documentos: Compruba o examina si la firma es verdadera.")
        self.bCifrarFirmar = wx.Button(self.panelA,self.idCifFir,"Cifrar/Firmar",size=(82,25))
        self.bCifrarFirmar.SetFont(wx.Font(8, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, ""))
        self.bCifrarFirmar.SetToolTipString("Firmar y cifrar documentos: Comprueba que el documento no fue modificado y ocultar el contenido del mismo para que sólo el destinatario final pueda leerlo.")
        self.bVerificarDescifrar = wx.Button(self.panelA,self.idVerDesc,"Verificar/Desc",size=(82,25))
        self.bVerificarDescifrar.SetFont(wx.Font(8, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, ""))
        self.bVerificarDescifrar.SetToolTipString("Descifrar y verificar las firma de documentos: Recupera el texto normal de un documento cifrado y comprueba si la firma es verdadera.")
        self.bBorrar = wx.Button(self.panelA,self.idBorrar,"Borrar S.",size=(82,25))
        self.bBorrar.SetFont(wx.Font(8, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, ""))
        self.bBorrar.SetToolTipString("Borrado Seguro de documentos: Elimina datos de tu disco duro de forma segura, los sobrescribe para impedir cualquier posibilidad de recuperación.")
        # CAJA HORIZONTAL QUE ALMACENARÁ LOS BOTONES
        boxBotones_1 = wx.BoxSizer(wx.HORIZONTAL)
        # AÑADIMOS LOS BOTONES
        boxBotones_1.Add(self.bCifrar,0,wx.TOP,0)#,border=50
        boxBotones_1.Add(self.bDescifrar,0,wx.ALL,0)
        boxBotones_1.Add(self.bFirmar,0,wx.ALL,0)
        boxBotones_1.Add(self.bVerificarF,0,wx.ALL,0)
        boxBotones_1.Add(self.bCifrarFirmar,0,wx.ALL,0)
        boxBotones_1.Add(self.bVerificarDescifrar,0,wx.ALL,0)
        boxBotones_1.Add(self.bBorrar,0,wx.TOP,0)
        
        
        # ALMACENAMOS LOS BOTONES Y EL LISTCTRL EN UN FLEXGRIDSIZER DE DOS COLUMNAS Y DOS FILA, CON SEPARACIÓN HORIZIONTAL Y VERTICAL DE 5
        sz = wx.FlexGridSizer(rows=2, cols=2, hgap=5, vgap=5)
        sz.Add(boxBotonesDirA,0, wx.TOP,100)
        sz.Add(self.dirAnhadido,0, wx.EXPAND)
        # CREAMO UNA CAJA VACIA PARA LLENAR EL ESPACIO DE LOS BOTONES boxBotonesDirA 
        sz.Add(wx.BoxSizer(wx.HORIZONTAL),0, wx.EXPAND)
        # INGRESAMOS LOS BOTONES QUE VAN DEBAJO DEL LISTCRTL
        sz.Add(boxBotones_1,0, wx.EXPAND)
        # AÑADIMOS EL FLEXGRIGSIZER AL PANELA
        self.panelA.SetSizer(sz)
        self.panelA.Layout()